package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql" // 导入MySQL驱动
)

func main() {
	// 数据源名称 DSN
	dsn := "root:bujiu@0629@tcp(47.108.183.122:3306)/web?charset=utf8mb4&parseTime=True&loc=Local"

	// 打开数据库
	db, err := sql.Open("mysql", dsn)
	if err != nil {
		panic(err)
	}
	defer db.Close()

	// 测试数据库是否能正常连接
	err = db.Ping()
	if err != nil {
		panic(err)
	}

	fmt.Println("成功连接到数据库！")

	// 查询数据
	rows, err := db.Query("SELECT * FROM leab_admin_user")
	if err != nil {
		panic(err)
	}
	defer rows.Close()

	// 获取列名
	columns, err := rows.Columns()
	if err != nil {
		panic(err)
	}

	// 创建一个切片，用于保存每一行的数据
	values := make([]sql.RawBytes, len(columns))

	// 创建一个接口切片，用于 Scan
	scanArgs := make([]interface{}, len(values))
	for i := range values {
		scanArgs[i] = &values[i]
	}

	// 遍历结果
	for rows.Next() {
		err := rows.Scan(scanArgs...)
		if err != nil {
			panic(err)
		}

		// 打印字段名和对应的值
		rowData := make(map[string]string)
		for i, col := range columns {
			rowData[col] = string(values[i])
			fmt.Printf("%s: %s\n", col, rowData[col])
		}
		fmt.Println("-----")
	}

	// 检查遍历过程中是否有错误
	err = rows.Err()
	if err != nil {
		panic(err)
	}
}
